#include"include/cmd_Task.h"




//初始化主线程资源
int init_main_thread_resource(main_thread_resource_t *main_thread_resource){
    bzero(main_thread_resource,sizeof(main_thread_resource_t));
    main_thread_resource->netfd_count=0;
    return 0;
}

// 添加netfd到主资源结构体中W
int add_netfd_to_resource(main_thread_resource_t *main_thread_resource,int netfd){
    if(main_thread_resource->netfd_count>=1024){
        printf("netfd_count 超过1024\n");
        return -1;
    }
    printf("添加netfd到主资源结构体net_count:%d中: %d\n",main_thread_resource->netfd_count,netfd);
    main_thread_resource->netfd[main_thread_resource->netfd_count++]=netfd;
    return 0;
}

// 初始化任务，加入至线程池的任务队列中
task_t* task_init(int netfd){
    task_t *task=(task_t*)calloc(1,sizeof(task_t));
    task->_netfd=netfd;
    task->_train._cmdType=CMD_TYPE_INIT;
    task->_train._trainLen=0;
    memset(task->_dir, 0, sizeof(task->_dir)); // 使用整个数组的大小
    return task;
}

//初始化连接结构体
int init_accept_info(accept_info_t * info){
    memset(info->username,0,sizeof(info->username));
    info->is_new=0;
    memset(info->jwt,0,sizeof(info->jwt));
    info->jwt_length=0;
    //初始化jwt结构体
    return 0;
}

//判断长短命令（返回0是短命令，1是长命令）
int judge_cmd_type(train_t *train){
    switch(train->_cmdType){
        case CMD_TYPE_INIT:
        case CMD_TYPE_CD:
        case CMD_TYPE_LS: 
        case CMD_TYPE_PWD:
        case CMD_TYPE_MKDIR:
        case CMD_TYPE_REMOVE:
        case CMD_TYPE_RMDIR:
            return 0;
        case CMD_TYPE_GETS:
        case CMD_TYPE_PUTS:
            return 1;
        case CMD_TYPE_NOTCMD:
            return -1;
    }
}

// 工作线程处理客户端的各种任务()
void client_thread_long(void *arg){
    printf("接收到长任务\n");
    task_t* task = (task_t*)arg;
    printf("task->_train._cmdType:%d\n",task->_train._cmdType);
    printf("task->_train._data:%s\n",task->_train._data);    
}
// 短命令线程
void client_thread_short(void *arg){
    //接收到短任务
    printf("接收到短任务\n");
    task_t *task = (task_t*)arg;
    printf("task->_train._cmdType:%d\n",task->_train._cmdType);
    printf("task->_train._data:%s\n",task->_train._data);
}
    // task_t * task=(task_t*)arg;
    //  //服务器端维护一个目录栈结构
    //  _dirStack_t dirstack;
    // _dirStack_init(&dirstack);
    // //初始的客户端路径为 /
    // _dirStack_push(&dirstack, "/");
    // char *rootdir=strdup(server_dir);
    // char *usedir=NULL;

    // while(1){
   
    // bzero(&task->_train, sizeof(task->_train));
    // int ret_recv1=recv(task->_netfd,&task->_train,sizeof(task->_train),0);
    // ERROR_CHECK(ret_recv1, 0, "recv1 failed in client_thread");
    // // 调用目录解析函数返回服务器的真实地址与客户端的虚假地址
    // if(getDirstack(task,&dirstack,&rootdir,&usedir)==false){
    //     printf("getDirstack failed in client_thread\n");
    //     continue;
    // }
    // //判断rootdir末尾是否为/若是的话去除
    // if(rootdir[strlen(rootdir)-1]=='/'){
    //     rootdir[strlen(rootdir)-1]='\0';
    // }
    // switch(task->_train._cmdType){
    //     case CMD_TYPE_INIT:
    //         break;
    //     case CMD_TYPE_CD:
    //         handle_cd( &dirstack,rootdir, task);
    //         break;
    //     case CMD_TYPE_LS:
    //         handle_ls(&dirstack,task);
    //         break;
    //     case CMD_TYPE_PWD:
    //         handle_pwd(&dirstack,task);
    //         break;
    //     case CMD_TYPE_MKDIR:
    //         handle_mkdir(&dirstack, task);
    //         break;
    //     case CMD_TYPE_RMDIR:
    //         handle_rmdir(&dirstack, task);
    //         break;
    //     case CMD_TYPE_REMOVE:
    //         handle_remove(&dirstack, task);
    //         break;
    //     case CMD_TYPE_PUTS:
    //         handle_puts(&dirstack, task);
    //         break;
    //     case CMD_TYPE_GETS:
    //         handle_gets(&dirstack, task);
    //         break;
    //     default:
    //         printf("输入的命令错误，请重新输入\n");
    //         break;
    //     }
    // }
    //         free(arg);


// 将字符串切分并存入tokens数组中
void splitString(char *stdinchar,const char *delimiter,char *tokens[]){
     char *saveptr=NULL;
     char *token=strtok_r(stdinchar,delimiter,&saveptr);
     int i=0;
     while(token!=NULL){
        tokens[i++]=token;
        token=strtok_r(NULL,delimiter,&saveptr);
     }
     tokens[i]=NULL;
}

// 处理cd命令
int handle_cd( ){

}

//处理pwd命令
int handle_pwd(){

}

// 处理ls命令只支持ls当前目录
int handle_ls(){

}

// 处理创建文件夹
int handle_mkdir(){

}

// 删除文件夹
int handle_rmdir(){

}

//删除文件
int handle_remove(){

}

// 客户端上传文件
int handle_puts(){

}

//客户端下载文件
int handle_gets(){
    
}







